iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Modern Web

FastAPI 入門30天系列 第 6

Day-6 好用的依賴注入

  • 分享至 

  • xImage
  •  

依賴注入是 FastAPI 的一個簡單好用的功能,可以將路徑操作函數所需要的方法,透過 FastAPI 框架先行執行後提供給路徑操作參數。

依賴注入常用於:

  • 共享業務邏輯 ( 複用程式碼 )
  • 共享資料庫連接
  • 實現安全性、身分驗證、角色權限
  • etc.

透過依賴注入可以減少重複的程式碼,使程式更好維護。

以下是與依賴注入相同概念的術語:

  • 資源(Resource)
  • 提供者(Provider)
  • 服務(Service)
  • 可注入(Injectable)
  • 元件(Component)

使用方法

def hello():
    print("depends hello")
    return "Hello World"

我們先定義一個 hello 方法,執行此方法時會列印 “depends hello”,讓你們知道這裡是使用依賴注入執行的,然後再回傳一個 “Hello World”。

from fastapi import FastAPI, Depends

app = FastAPI()

@app.get("/test")
def test_depends(test: str = Depends(hello)):
    return test

接口的部分在定義輸入的地方使用 fastapi 庫中的 Depends 呼叫 hello 達成使用依賴注入,並將回傳值傳遞給 test 參數。

https://ithelp.ithome.com.tw/upload/images/20230911/20152669JsbkIo6Z1K.png

在API文件中可以看到沒有任何需要傳入的參數,因為我們僅僅定義了一個參數已經使用依賴注入獲取所需值。

https://ithelp.ithome.com.tw/upload/images/20230911/201526691cSClGLHQ2.png

呼叫接口後可以看到 cmd 中出現 “depends hello”,便是依賴注入成功執行。

https://ithelp.ithome.com.tw/upload/images/20230911/2015266939AJBlAsMn.png

回傳值也成功拿取到注入的”Hello World”。

資料驗證用法

我們也可以使用依賴注入,事先驗證所需要的資料,例如傳入的 user id 在資料庫中使否有值等等情境。在依賴注入方法中聲明的輸入也會被附加到路徑操作函數中。

from fastapi import FastAPI, status, Depends, HTTPException
from uuid import UUID

fake_data = {
    "3fa85f64-5717-4562-b3fc-2c963f66afa6": {
        "name": "John Doe",
        "age": 30,
        "email": "test1@test.com",
    }
}

def get_user_data(id: UUID) -> dict:
		id = str(id)
    if id not in fake_data.keys():
        raise HTTPException(status_code=404, detail="User not found")
    return fake_data[id]

我們使用假資料來實作一下資料驗證的功能,可以看到我們在 get_user_data 中要求要輸入一個 id 型態是 UUID,如果字典中有這個 id 便會回傳資料,沒有的話便會回傳一個 404 的狀態給前端。

https://ithelp.ithome.com.tw/upload/images/20230911/20152669XaBjAOIfMC.png

可以看到注入此方法後,路徑變成需要輸入一個 uuid 的 id 參數 ,畫面上我使用錯誤的 id 進行請求。

https://ithelp.ithome.com.tw/upload/images/20230911/20152669d4E4iXlpzU.png

可以如預期中獲得 404 的狀態,完成輸入資料驗證的功能。

https://ithelp.ithome.com.tw/upload/images/20230911/20152669VemH7I6kOr.png

輸入正確id可獲得字典內資訊。

小結

依賴注入還有更多種用法,在此便不一一介紹,例如依賴注入呼叫的方法也可以使用依賴注入獲取另一個方法的執行結果,實現多層依賴。之後實作練習專案時,也會使用到依賴注入的方式來獲取資料庫連接。官方文件中可以找到更多的依賴注入範例,想更深層運用的同學們可以去閱讀看看。

參考資料

依赖项 - FastAPI (tiangolo.com)


上一篇
Day-5 在Request Body中的參數
下一篇
Day-7 清晰的專案架構
系列文
FastAPI 入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言